package org.example.shop_front_api.utils;

import lombok.Data;

/**
 * 统一响应结果类
 * 字段名统一为 code、msg、data，适配前后端交互习惯
 */
@Data
public class JsonResult {
    private int code;       // 响应状态码：200成功，500失败，可扩展其他状态码
    private String msg;     // 响应提示消息
    private Object data;    // 响应数据（可选，成功时返回具体数据，失败时为null）

    // 无参构造函数（JSON序列化/反序列化必须）
    public JsonResult() {
    }

    // 全参构造函数（内部创建对象使用）
    public JsonResult(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    // 1. 成功响应：带消息和数据
    public static JsonResult success(String msg, Object data) {
        return new JsonResult(200, msg, data);
    }

    // 2. 成功响应：只带消息，无数据
    public static JsonResult success(String msg) {
        return new JsonResult(200, msg, null);
    }

    // 3. 失败响应：只带错误消息（默认状态码500）
    public static JsonResult failed(String msg) {
        return new JsonResult(500, msg, null);
    }

    // 4. 失败响应：自定义错误码和消息（支持精细化错误处理）
    public static JsonResult failed(int code, String msg) {
        return new JsonResult(code, msg, null);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}